package com.cyw.common.annotations;


import com.cyw.common.annotations.support.CheckEnumLegalValidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * 枚举校验 标识注解
 * @Author:cyw
 * @CreateTime: 2021年1月7日14:14:25
 **/
@Target({FIELD, PARAMETER})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = CheckEnumLegalValidator.class)
public @interface CheckEnumLegal {

    String message() default "非法类型值";

    Class<? extends Enum<?>> enumClass();

    /**
     * 1、强制方法返回值为Boolean
     * 2、强制方法为静态方法
     * 3、默认校验方法名 validate,后续自己设置
     * 4、entity数据类型要和validate方法参数数据类型要一致 !
     * 5、调用validate方法时，不能抛出异常...
     * 6、最好在枚举类的validate方法上,加上 @CannotDelete 注解标识下...避免被删除 {@link CannotDelete}
     */
    String checkLegalMethodName() default "validate";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}